package com.ruoyi.system.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.DzShiti;
import com.ruoyi.system.domain.DzTixx;
import com.ruoyi.system.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.DzTikuMapper;
import com.ruoyi.system.domain.DzTiku;


import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.mapper.DzHuiyuanMapper;
import com.ruoyi.system.domain.DzHuiyuan;

/**
 * 题库信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-09-02
 */
@Service
public class DzTikuServiceImpl implements IDzTikuService 
{
    @Autowired
    private DzTikuMapper dzTikuMapper;


    @Autowired
    private IDzShitiService dzShitiService;
    @Autowired
    private IDzTixxService dzTixxService;

    @Autowired
    private ISysRoleService sysRoleService;

    @Autowired
    private IDzHuiyuanService dzHuiyuanService;

    /**
     * 查询题库信息
     * 
     * @param tiId 题库信息主键
     * @return 题库信息
     */
    @Override
    public DzTiku selectDzTikuByTiId(Long tiId)
    {
        DzTiku tiku = dzTikuMapper.selectDzTikuByTiId(tiId);
        DzTixx tixx = new DzTixx();
        tixx.setTiId(tiku.getTiId());
        List<DzTixx> xxlist =  dzTixxService.selectDzTixxList(tixx);
        tiku.setXxlist(xxlist);
        return tiku;
    }

    /**
     * 查询题库信息列表
     * 
     * @param dzTiku 题库信息
     * @return 题库信息
     */
    @Override
    public List<DzTiku> selectDzTikuList(DzTiku dzTiku)
    {
        List<DzTiku> tikulist = null;

        List<DzTiku> tikulist2 = new ArrayList<>();
        //权限控制
        SysUser user=  SecurityUtils.getLoginUser().getUser();
        List<SysRole> listRole= sysRoleService.selectRolesByUserId(user.getUserId());
        int datascope = 5;
        for(SysRole role:listRole){
            if( role.getDataScope()!=null&&Integer.parseInt(role.getDataScope())<datascope){
                datascope=Integer.parseInt(role.getDataScope());
            }
        }
        dzTiku.setDatascope(datascope);
        if(datascope==4){
            dzTiku.setCheckDeptId(user.getDeptId());
        }
        if(datascope==5){
            DzHuiyuan huiyuan =  dzHuiyuanService.selectDzHuiyuanByDn(user.getPhonenumber());
            if(huiyuan!=null){
                dzTiku.setCheckHuiyuanId(huiyuan.getId());
            }else{
                dzTiku.setCheckHuiyuanId(0l);
            }

        }
        tikulist = dzTikuMapper.selectDzTikuList(dzTiku);
        for(DzTiku dzTikuTemp:tikulist){
            DzTixx tixx = new DzTixx();
            tixx.setTiId(dzTikuTemp.getTiId());
            List<DzTixx> xxlist =  dzTixxService.selectDzTixxList(tixx);
            dzTikuTemp.setXxlist(xxlist);
            tikulist2.add(dzTikuTemp);
        }

        return tikulist2;
    }

    @Override
    public List<DzTiku> selectDzTikuListWeb(DzTiku dzTiku)
    {

        List<DzTiku> tikulist = null;

        List<DzTiku> tikulist2 = new ArrayList<>();
        tikulist = dzTikuMapper.selectDzTikuList(dzTiku);
        for(DzTiku dzTikuTemp:tikulist){
            DzTixx tixx = new DzTixx();
            tixx.setTiId(dzTikuTemp.getTiId());
            List<DzTixx> xxlist =  dzTixxService.selectDzTixxListWeb(tixx);
            dzTikuTemp.setXxlist(xxlist);
            tikulist2.add(dzTikuTemp);
        }
        return tikulist2;
    }

    @Override
    public List<DzTiku> selectDzCuoList(DzTiku dzTiku) {
        List<DzTiku> tikulist = null;

        List<DzTiku> tikulist2 = new ArrayList<>();
        tikulist = dzTikuMapper.selectDzCuoList(dzTiku);
        for(DzTiku dzTikuTemp:tikulist){
            DzTixx tixx = new DzTixx();
            tixx.setTiId(dzTikuTemp.getTiId());
            List<DzTixx> xxlist =  dzTixxService.selectDzTixxListWeb(tixx);
            dzTikuTemp.setXxlist(xxlist);
            tikulist2.add(dzTikuTemp);
        }
        return tikulist2;
    }

    @Override
    public List<DzTiku> selectDzShiList(DzTiku dzTiku) {
        List<DzTiku> tikulist = null;

        List<DzTiku> tikulist2 = new ArrayList<>();
        tikulist = dzTikuMapper.selectDzShiList(dzTiku);
        for(DzTiku dzTikuTemp:tikulist){
            DzTixx tixx = new DzTixx();
            tixx.setTiId(dzTikuTemp.getTiId());
            List<DzTixx> xxlist =  dzTixxService.selectDzTixxListWeb(tixx);
            dzTikuTemp.setXxlist(xxlist);
            tikulist2.add(dzTikuTemp);
        }
        return tikulist2;
    }

    /**
     * 新增题库信息
     * 
     * @param dzTiku 题库信息
     * @return 结果
     */
    @Override
    public int insertDzTiku(DzTiku dzTiku)
    {
        dzTiku.setCreateTime(DateUtils.getNowDate());
        int tiId = dzTikuMapper.insertDzTiku(dzTiku);
        System.out.println("返回题目的id"+dzTiku.getTiId());
        if(dzTiku.getXxlist()!=null&&dzTiku.getXxlist().size()>0){
            dzTixxService.deleteDzTixxByTiId(dzTiku.getTiId());
            for(DzTixx tixx:dzTiku.getXxlist()){
                tixx.setTiId(dzTiku.getTiId());
                dzTixxService.insertDzTixx(tixx);
            }

        }

        return tiId;

    }

    @Override
    public int insertDzTikuList(List<DzTiku> dzTikuList) {
        //获取试卷id
        Long sjId = dzTikuList.get(0).getSjId();
        //删除所有试题
        dzShitiService.deleteDzShitiBySjId(sjId);
        //获取最大的排序号
        int  maxOrderNo =0;

        //权限控制
        SysUser user=  SecurityUtils.getLoginUser().getUser();
        List<SysRole> listRole= sysRoleService.selectRolesByUserId(user.getUserId());
        int datascope = 5;
        Long deptid = null;
        Long huiyuanid = null;
        for(SysRole role:listRole){
            if( role.getDataScope()!=null&&Integer.parseInt(role.getDataScope())<datascope){
                datascope=Integer.parseInt(role.getDataScope());
            }
        }
        if(datascope==4){
            deptid=user.getDeptId();
        }
        if(datascope==5){
            DzHuiyuan huiyuan =  dzHuiyuanService.selectDzHuiyuanByDn(user.getPhonenumber());
            if(huiyuan!=null){
                huiyuanid=huiyuan.getId();
            }else{
                huiyuanid=0l;
            }

        }

        for(DzTiku querytiku:dzTikuList){
            querytiku.setDatascope(datascope);
            querytiku.setDeptId(deptid);
            querytiku.setHuiyuanId(huiyuanid);
            List<DzTiku> list = dzTikuMapper.selectDzTikuList(querytiku);
            for(DzTiku tiku:list){
                DzShiti dzShitiTemp = new DzShiti();
                dzShitiTemp.setSjId(sjId);
                dzShitiTemp.setTiId(tiku.getTiId());
                dzShitiTemp.setFenshu(querytiku.getScore());
                maxOrderNo=maxOrderNo+1;
                dzShitiTemp.setOrderno(Long.parseLong(maxOrderNo+"") );
                dzShitiService.insertDzShiti(dzShitiTemp);
            }

        }


        return 1;
    }

    /**
     * 修改题库信息
     * 
     * @param dzTiku 题库信息
     * @return 结果
     */
    @Override
    public int updateDzTiku(DzTiku dzTiku)
    {
        if(dzTiku.getXxlist()!=null&&dzTiku.getXxlist().size()>0){
            dzTixxService.deleteDzTixxByTiId(dzTiku.getTiId());
            for(DzTixx tixx:dzTiku.getXxlist()){
                tixx.setTiId(dzTiku.getTiId());
                dzTixxService.insertDzTixx(tixx);
            }

        }
        return dzTikuMapper.updateDzTiku(dzTiku);
    }

    /**
     * 批量删除题库信息
     * 
     * @param tiIds 需要删除的题库信息主键
     * @return 结果
     */
    @Override
    public int deleteDzTikuByTiIds(Long[] tiIds)
    {
        return dzTikuMapper.deleteDzTikuByTiIds(tiIds);
    }

    /**
     * 删除题库信息信息
     * 
     * @param tiId 题库信息主键
     * @return 结果
     */
    @Override
    public int deleteDzTikuByTiId(Long tiId)
    {
        return dzTikuMapper.deleteDzTikuByTiId(tiId);
    }
}
